/**
 * 
 */
package co.edu.uniquindio.pruebas;

import java.util.Date;
import java.util.List;

import javax.naming.NamingException;

import org.junit.Assert;
import org.junit.Test;

import co.edu.uniquindio.logica.Automovil;
import co.edu.uniquindio.logica.Marca;
import co.edu.uniquindio.logica.Modelo;


/**
 * 
 * Prueba implementation class for: PruebaMarca
 * El proposito de esta clase es el probar  la
 * DAO relacionada con la informacion de una marca.
 * @author Andres Felipe Abril 
 * @author Luis Enrique Robledo
 *
 */
public class PruebaMarca extends PruebaMagnum
{
	private Marca marca;
	private Marca marca2;
	private Marca marca3;
	/**
	 * este metodo constructor me permitira inicializar el contenedor
     * @throws NamingException 
	 */
	public PruebaMarca() throws NamingException 
	{
		super();
	}
	/**
	 * Metodo en el cual se hacen diversas incersiones en la BD atravez de
	 * de la DAO pertinente relacionada a la marca para despues verificar
	 * los datos obtenidos atravez de la misma DAO. 
	 * @throws NamingException
	 */
    @Test
    public void testCrudMarca() throws NamingException 
    {
    	
    	marca=new Marca("Mazda","los mejores autos");
    	marca2=new Marca("peye","ok");
    	marca3=new Marca("lamboryini", "");
    	
    	//prueba de insercion
    	//marcaDao.insert(marca);
    	//Assert.assertEquals("Mazda", marca.getNombre());
    	//marcaDao.insert(marca2);
    	//marcaDao.insert(marca3);
    	
    	
    	//Prueba de búsqueda
    	Marca marcaRecuperada=marcaDao.findByKey(marca.getNombre());
    	Assert.assertEquals(marcaRecuperada.getNombre(), marca.getNombre());
    	
    	//Prueba actualización
    	marcaRecuperada.setNombre("chevrolet");
    	marcaDao.update(marcaRecuperada);
    	marca=marcaDao.findByKey(marcaRecuperada.getNombre());
    	Assert.assertEquals("chevrolet",marca.getNombre());
    
    	//Prueba getAll
    	Marca otraMarca=new Marca();
    	otraMarca.setNombre("Audi");
    	otraMarca.setDescripcion("importado");
    	//marcaDao.insert(otraMarca);
    	List<Marca>marcas=marcaDao.getAll();
    	for (Marca marca : marcas) {
			System.out.println(marca.getNombre());
		}
    	Assert.assertTrue(marcas.contains(otraMarca));
        Assert.assertTrue(marcas.contains(marca));    	
    	
		//Prueba select
//        marcas=marcaDao.select("marca.nombre='Audi");
//        Assert.assertTrue(marcas.contains(otraMarca));
//        Assert.assertTrue(marcas.contains(marca));
        
        
        //Prueba delete
        //marcaDao.remove(marca);
        //marcaDao.remove(otraMarca);
//        marcas=marcaDao.getAll();
//        Assert.assertTrue(!marcas.contains(otraMarca));
//        Assert.assertTrue(!marcas.contains(marca));    	

//		automoviles=automovilDao.select("entidad.nombre='123ter'");
//		
//		personas = personaDao.select("entidad.nombre = 'Juanita'");
//		Assert.assertTrue(personas.contains(otraPersona));
//		Assert.assertTrue(!personas.contains(persona));

    }
    /**
     * este metodo me permite probar el metodo obtenerMarca    
     * @throws NamingException 
     */
    @Test
    public void pruebaObtenerMarca() throws NamingException
    {
      
      Automovil auto = automovilDao.findByKey("123tre");
      marcaDao.obtenerMarca(auto);	
      Assert.assertEquals("renoult", auto.getModelo().getMarca().getNombre());
      
    }
    @Test
    public void pruebaMarcaAutomovil() throws NamingException
    {
    	
    	List<Marca>lista =marcaDao.marcaAutomovil();
    	Assert.assertEquals(lista.size(), 1);
    	
    	for (Marca marca : lista)
    	{
		  System.out.println(marca.getNombre());	
		}
    }
    
}
